home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / vts139b.zip / BIOSVIDE.PAS < prev    next >
Pascal/Delphi Source File  |  1993-04-25  |  9KB  |  429 lines

  1. {****************************************************************************}
  2. {                                                                            }
  3. { MODULE:         BiosVideo                                                  }
  4. {                                                                            }
  5. { DESCRIPTION:    Provides access to all the BIOS video services.            }
  6. {                                                                            }
  7. { AUTHOR:         Juan Carlos Arévalo                                        }
  8. {                                                                            }
  9. { MODIFICATIONS:  Nobody (yet ;-)                                            }
  10. {                                                                            }
  11. { HISTORY:        19-Dec-1992 Creation.                                      }
  12. {                                                                            }
  13. { (C) 1992 VangeliSTeam                                                      }
  14. {____________________________________________________________________________}
  15.  
  16.  
  17. UNIT BiosVideo;
  18.  
  19. INTERFACE
  20.  
  21. TYPE
  22.   TVideoStateSaved =
  23.     RECORD
  24.       Mode     : BYTE;
  25.       FontSize : BYTE;
  26.       Buffer   : POINTER;
  27.     END;
  28.  
  29. CONST
  30.   Int10Ptr : POINTER = NIL;
  31.  
  32.  
  33.  
  34.  
  35. PROCEDURE SaveVideoState      (VAR Buffer: TVideoStateSaved);
  36. PROCEDURE RestoreVideoState   (VAR Buffer: TVideoStateSaved);
  37. PROCEDURE SetVideoMode        (Mode: BYTE);
  38. FUNCTION  GetVideoMode                      : BYTE;
  39. PROCEDURE ForceEGAMode;
  40.                              
  41. PROCEDURE SelectFont8x8       (Font: BYTE);         
  42. PROCEDURE SelectFont8x14      (Font: BYTE);         
  43. PROCEDURE SelectFont8x16      (Font: BYTE);         
  44. PROCEDURE SelectFontQuiet8x8  (Font: BYTE);         
  45. PROCEDURE SelectFontQuiet8x14 (Font: BYTE);         
  46. PROCEDURE SelectFontQuiet8x16 (Font: BYTE);         
  47. PROCEDURE FillFont            (Font: BYTE; First: CHAR; NChars: WORD;
  48.                                Size: BYTE; Data: POINTER); 
  49. PROCEDURE SelectFonts         (FontDim, FontBright: BYTE); 
  50.  
  51. PROCEDURE NoCursor;                                        
  52. PROCEDURE UnderCursor;                                     
  53. PROCEDURE BlockCursor;                                     
  54. PROCEDURE SetCursor           (x, y: BYTE; Page: BYTE); 
  55.  
  56. PROCEDURE BlinkOff;                                        
  57. PROCEDURE SetPalette          (Palette: POINTER);
  58.  
  59. PROCEDURE SetVideoPage        (Page: BYTE);             
  60.  
  61. PROCEDURE FillVideoMemory     (Chr: CHAR; Attr: BYTE);  
  62.  
  63.  
  64.  
  65.  
  66. IMPLEMENTATION
  67.  
  68.  
  69.  
  70.  
  71. PROCEDURE CallInt10; ASSEMBLER;
  72.   ASM
  73.         PUSH    AX
  74.         MOV     AX,[WORD PTR Int10Ptr]
  75.         AND     AX,AX
  76.         POP     AX
  77.         JZ      @@noptr
  78.          PUSHF
  79.          CALL   [Int10Ptr]
  80.         JMP     @@Fin
  81. @@noptr: INT    10h
  82. @@Fin:
  83.   END;
  84.  
  85.  
  86.  
  87. {----------------------------------------------------------------------------}
  88. { Video mode services.                                                       }
  89. {____________________________________________________________________________}
  90.  
  91.  
  92. PROCEDURE SaveVideoState(VAR Buffer: TVideoStateSaved);
  93.   VAR
  94.     FSize : WORD ABSOLUTE 0:$485;
  95.   BEGIN
  96.  
  97.     Buffer.FontSize := FSize;
  98.     Buffer.Mode     := GetVideoMode;
  99.  
  100.     ASM
  101.  
  102.         MOV     CX,$07
  103.         LES     BX,[Buffer]
  104.         LES     BX,TVideoStateSaved([ES:BX]).Buffer
  105.  
  106.         MOV     AX,$1C01
  107.         CALL    CallInt10
  108.  
  109.     END;
  110.  
  111.   END;
  112.  
  113.  
  114. PROCEDURE RestoreVideoState(VAR Buffer: TVideoStateSaved);
  115.   BEGIN
  116.  
  117.     SetVideoMode(Buffer.Mode);
  118.     CASE Buffer.FontSize OF
  119.        8 : SelectFont8x8(0);
  120.       14 : SelectFont8x14(0);
  121.       16 : SelectFont8x16(0);
  122.     ELSE
  123.       SelectFont8x16(0);
  124.     END;
  125.  
  126.     ASM
  127.  
  128.         MOV     CX,$07
  129.         LES     BX,[Buffer]
  130.         LES     BX,TVideoStateSaved([ES:BX]).Buffer
  131.  
  132.         MOV     AX,$1C02
  133.         CALL    CallInt10
  134.  
  135.     END;
  136.  
  137.   END;
  138.  
  139.  
  140. PROCEDURE SetVideoMode(Mode: BYTE); ASSEMBLER;
  141.   ASM
  142.  
  143.         MOV     AL,Mode
  144.  
  145.         XOR     AH,AH
  146.         CALL    CallInt10
  147.  
  148.   END;
  149.  
  150.  
  151. FUNCTION GetVideoMode : BYTE; ASSEMBLER;
  152.   ASM
  153.  
  154.         MOV     AH,$F
  155.         CALL    CallInt10
  156.  
  157.         AND     AL,$7F
  158.  
  159.   END;
  160.  
  161.  
  162. PROCEDURE ForceEGAMode; ASSEMBLER;
  163.   ASM
  164.  
  165.         MOV     BL,$30   { en vez de 9x8, que no sirve para hacer gráficos bien. }
  166.  
  167.         MOV     AX,$1201 { 350 líneas (EGA) para que los caracteres tengan 8X8   }
  168.         CALL    CallInt10
  169.  
  170.   END;
  171.  
  172.  
  173.  
  174.  
  175. {----------------------------------------------------------------------------}
  176. { Font services.                                                             }
  177. {____________________________________________________________________________}
  178.  
  179.  
  180. PROCEDURE SelectFont8x8(Font: BYTE); ASSEMBLER;
  181.   ASM
  182.  
  183.         MOV     BL,Font
  184.  
  185.         MOV     AX,$1112 
  186.         CALL    CallInt10
  187.  
  188.   END;
  189.  
  190.  
  191. PROCEDURE SelectFont8x14(Font: BYTE); ASSEMBLER;
  192.   ASM
  193.  
  194.         MOV     BL,Font
  195.  
  196.         MOV     AX,$1111
  197.         CALL    CallInt10
  198.  
  199.   END;
  200.  
  201.  
  202. PROCEDURE SelectFont8x16(Font: BYTE); ASSEMBLER;
  203.   ASM
  204.  
  205.         MOV     BL,Font
  206.  
  207.         MOV     AX,$1114
  208.         CALL    CallInt10
  209.  
  210.   END;
  211.  
  212.  
  213. PROCEDURE SelectFontQuiet8x8(Font: BYTE); ASSEMBLER;
  214.   ASM
  215.  
  216.         MOV     BL,Font
  217.  
  218.         MOV     AX,$1102
  219.         CALL    CallInt10
  220.  
  221.   END;
  222.  
  223.  
  224. PROCEDURE SelectFontQuiet8x14(Font: BYTE); ASSEMBLER;
  225.   ASM
  226.  
  227.         MOV     BL,Font
  228.  
  229.         MOV     AX,$1101
  230.         CALL    CallInt10
  231.  
  232.   END;
  233.  
  234.  
  235. PROCEDURE SelectFontQuiet8x16(Font: BYTE); ASSEMBLER;
  236.   ASM
  237.  
  238.         MOV     BL,Font
  239.  
  240.         MOV     AX,$1104
  241.         CALL    CallInt10
  242.  
  243.   END;
  244.  
  245.  
  246. PROCEDURE FillFont(Font: BYTE; First: CHAR; NChars: WORD;
  247.                    Size: BYTE; Data: POINTER); ASSEMBLER;
  248.   ASM
  249.  
  250.         PUSH    BP       { Rellena el segundo font }
  251.  
  252.         MOV     BL,Font
  253.         MOV     BH,Size
  254.         MOV     CX,NChars
  255.         MOV     DL,First
  256.         XOR     DH,DH
  257.         LES     BP,Data
  258.  
  259.         MOV     AX,$1110
  260.         CALL    CallInt10
  261.  
  262.         POP     BP
  263.  
  264.   END;
  265.  
  266.  
  267. PROCEDURE SelectFonts(FontDim, FontBright: BYTE); ASSEMBLER;
  268.   ASM
  269.  
  270.         MOV     AL,FontDim
  271.         MOV     BL,AL
  272.         AND     AL,100b
  273.         SHL     AL,2
  274.         AND     BL,11b
  275.         OR      BL,AL
  276.         MOV     AL,FontBright
  277.         MOV     AH,AL
  278.         AND     AL,100b
  279.         SHL     AL,3
  280.         OR      BL,AL
  281.         AND     AH,11b
  282.         SHL     AH,2
  283.         OR      BL,AH
  284.  
  285.         MOV     AX,$1103     { Activa los dos fonts }
  286.         CALL    CallInt10
  287.  
  288.   END;
  289.  
  290.  
  291.  
  292.  
  293. {----------------------------------------------------------------------------}
  294. { Text cursor services.                                                      }
  295. {____________________________________________________________________________}
  296.  
  297.  
  298. PROCEDURE NoCursor; ASSEMBLER;
  299.   ASM
  300.  
  301.         MOV     CX,$700
  302.  
  303.         MOV     AH,1     
  304.         CALL    CallInt10
  305.  
  306.   END;
  307.  
  308.  
  309. PROCEDURE UnderCursor; ASSEMBLER;
  310.   ASM
  311.  
  312.         MOV     CX,$607
  313.  
  314.         MOV     AH,1     
  315.         CALL    CallInt10
  316.  
  317.   END;
  318.  
  319.  
  320. PROCEDURE BlockCursor; ASSEMBLER;
  321.   ASM
  322.  
  323.         MOV     CX,$007
  324.  
  325.         MOV     AH,1     
  326.         CALL    CallInt10
  327.  
  328.   END;
  329.  
  330.  
  331. PROCEDURE SetCursor(x, y: BYTE; Page: BYTE); ASSEMBLER;
  332.   ASM
  333.  
  334.         MOV     DH,y
  335.         MOV     DL,x
  336.         MOV     BH,Page
  337.  
  338.         MOV     AH,2
  339.         CALL    CallInt10
  340.  
  341.   END;
  342.  
  343.  
  344.  
  345.  
  346. {----------------------------------------------------------------------------}
  347. { Attribute services.                                                        }
  348. {____________________________________________________________________________}
  349.  
  350.  
  351. PROCEDURE BlinkOff; ASSEMBLER;
  352.   ASM
  353.  
  354.         MOV     DX,$3C0
  355.         MOV     AL,$30
  356.         OUT     DX,AL
  357.         INC     DX
  358.         IN      AL,DX
  359.         DEC     DX
  360.         MOV     AH,AL
  361.         MOV     AL,$30
  362.         OUT     DX,AL
  363.         MOV     AL,AH
  364.         AND     AL,11110111b
  365.         OUT     DX,AL
  366. (*
  367.         MOV     AX,$1003 { Quita parpadeo }
  368.  
  369.         MOV     BH,1
  370.         CALL    CallInt10
  371. *)
  372.   END;
  373.  
  374.  
  375. PROCEDURE SetPalette(Palette: POINTER); ASSEMBLER;
  376.   ASM
  377.  
  378.         LES     DX,Palette 
  379.  
  380.         MOV     AX,$1002
  381.         CALL    CallInt10
  382.  
  383.   END;
  384.  
  385.  
  386.  
  387.  
  388. {----------------------------------------------------------------------------}
  389. { Miscellaneous services.                                                    }
  390. {____________________________________________________________________________}
  391.  
  392.  
  393. PROCEDURE SetVideoPage(Page: BYTE); ASSEMBLER;
  394.   ASM
  395.  
  396.         MOV     AL,Page
  397.  
  398.         MOV     AH,$05
  399.         CALL    CallInt10
  400.  
  401.   END;
  402.  
  403.  
  404.  
  405.  
  406. {----------------------------------------------------------------------------}
  407. { Miscellaneous routines.                                                    }
  408. {____________________________________________________________________________}
  409.  
  410.  
  411. PROCEDURE FillVideoMemory(Chr: CHAR; Attr: BYTE); ASSEMBLER;
  412.   ASM
  413.  
  414.         CLD
  415.         MOV     DI,0  
  416.         MOV     AX,$B800
  417.         MOV     ES,AX
  418.         MOV     CX,$4000
  419.         MOV     AH,Attr
  420.         MOV     AL,Chr
  421.         REP STOSW
  422.  
  423.   END;
  424.  
  425.  
  426.  
  427.  
  428. END.
  429.